﻿function main() {
    // 用一次性撤销包裹整个操作
    app.doScript(function () {
        var doc = app.activeDocument;
        var sel = app.selection;

        if (sel.length < 2) {
            alert("请选择两个或以上的文本框。");
            return;
        }

        var textFrames = [];
        for (var i = 0; i < sel.length; i++) {
            if (sel[i].constructor.name == "TextFrame") {
                textFrames.push(sel[i]);
            }
        }

        if (textFrames.length < 2) {
            alert("请选择至少两个文本框。");
            return;
        }

        // 按位置排序
        textFrames.sort(function(a, b) {
            var ay = a.geometricBounds[0];
            var by = b.geometricBounds[0];
            if (Math.abs(ay - by) > 1) {
                return ay - by;
            } else {
                var ax = a.geometricBounds[1];
                var bx = b.geometricBounds[1];
                return ax - bx;
            }
        });

        var targetFrame = textFrames[0];
        var targetStory = targetFrame.parentStory;

        // 插入点设为末尾
        var insertionPoint = targetStory.insertionPoints[-1];

        // 从第二个文本框开始，逐个复制内容带格式
        for (var i = 1; i < textFrames.length; i++) {
            var sourceFrame = textFrames[i];
            var sourceStory = sourceFrame.parentStory;

            // 先插入段落符，分开不同文本框内容
            insertionPoint.contents = "\r";

            // 更新插入点（插入段落符后）
            insertionPoint = targetStory.insertionPoints[-1];

            // 复制源文本范围（带格式）
            var duplicatedText = sourceStory.texts[0].duplicate(LocationOptions.AFTER, insertionPoint);

            // 更新插入点为复制内容末尾，准备下一轮插入
            insertionPoint = targetStory.insertionPoints[-1];
        }

        // 删除除第一个文本框外的其他文本框
        for (var j = 1; j < textFrames.length; j++) {
            textFrames[j].remove();
        }

        //alert("文本合并完成，速度已优化。");
    }, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "合并文本框");
}

main();
